<?php
/**
 * Script for creating and loading database
 */

// Initialize the application path and autoloading
defined ( 'APPLICATION_PATH' ) || define ( 'APPLICATION_PATH', realpath ( dirname ( __FILE__ ) . '/../../application' ) );
set_include_path ( implode ( PATH_SEPARATOR, array (APPLICATION_PATH . '/../library', get_include_path () ) ) );
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance ();

// Define some CLI options
$getopt = new Zend_Console_Getopt ( array ('withdata|w' => 'Load database with sample data', 
		'env|e-s' => 'Application environment for which to create database (defaults to development)', 
		'help|h' => 'Help -- usage message' ) );
try {
	$getopt->parse ();
} catch ( Zend_Console_Getopt_Exception $e ) {
	// Bad options passed: report usage
	echo $e->getUsageMessage ();
	return false;
}

// If help requested, report usage message
if ($getopt->getOption ( 'h' )) {
	echo $getopt->getUsageMessage ();
	return true;
}

// Initialize values based on presence or absence of CLI options
$withData = $getopt->getOption ( 'w' );
$env = $getopt->getOption ( 'e' );
defined ( 'APPLICATION_ENV' ) || define ( 'APPLICATION_ENV', (null === $env) ? 'development' : $env );

// Initialize Zend_Application
$application = new Zend_Application ( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' );

// Initialize and retrieve DB resource
$bootstrap = $application->getBootstrap ();
$bootstrap->bootstrap ( 'db' );
$dbAdapter = $bootstrap->getResource ( 'db' );

// let the user know whats going on (we are actually creating a
// database here)
if ('testing' != APPLICATION_ENV) {
	echo 'Writing Database Guestbook in (control-c to cancel): ' . PHP_EOL;
	for($x = 5; $x > 0; $x --) {
		echo $x . "\r";
		sleep ( 1 );
	}
}

// Check to see if we have a database file already
$options = $bootstrap->getOption ( 'resources' );
$dbFile = $options ['db'] ['params'] ['dbname'];
if (file_exists ( $dbFile )) {
	unlink ( $dbFile );
}

// this block executes the actual statements that were loaded from
// the schema file.
try {
	$schemaSql = file_get_contents ( dirname ( __FILE__ ) . '/schema.sqlite.sql' );
	// use the connection directly to load sql in batches
	$dbAdapter->getConnection ()->exec ( $schemaSql );
	chmod ( $dbFile, 0666 );
	
	if ('testing' != APPLICATION_ENV) {
		echo PHP_EOL;
		echo 'Database Created';
		echo PHP_EOL;
	}
	
	if ($withData) {
		$dataSql = file_get_contents ( dirname ( __FILE__ ) . '/data.sqlite.sql' );
		// use the connection directly to load sql in batches
		$dbAdapter->getConnection ()->exec ( $dataSql );
		if ('testing' != APPLICATION_ENV) {
			echo 'Data Loaded.';
			echo PHP_EOL;
		}
	}

} catch ( Exception $e ) {
	echo 'AN ERROR HAS OCCURED:' . PHP_EOL;
	echo $e->getMessage () . PHP_EOL;
	return false;
}

// generally speaking, this script will be run from the command line
return true;

